package com.mzm.ui.admin;

import java.awt.ComponentOrientation;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.JPanel;

import org.jdesktop.swingx.JXComboBox;
import org.jdesktop.swingx.combobox.ListComboBoxModel;

import com.mzm.api.ProductInfoDto;
import com.mzm.api.RecommendationDto;

import dnl.util.ui.OkDialog;

/**
 * 
 * @author daniel
 */
public class RecommendationEditingDialog extends OkDialog {

	private RecommendationEditorPanel editorPanel = new RecommendationEditorPanel();
	private JXComboBox categoryCombo = new JXComboBox();
	private JXComboBox productCombo = new JXComboBox();

	private AdminContext adminContext;

	private List<ProductInfoDto> productInfos = Collections.emptyList();

	/**
	 * Creates new form RecommendationEditingDialog
	 */
	public RecommendationEditingDialog(java.awt.Frame parent, boolean modal) {
		super(parent, modal);
		initComponents();
		jScrollPane1.setViewportView(editorPanel);

		JPanel north = new JPanel();
		getContentPane().add(north, java.awt.BorderLayout.NORTH);
		north.add(categoryCombo);
		north.add(productCombo);
		categoryCombo.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String cat = (String) categoryCombo.getSelectedItem();
				productInfos = adminContext.getMzmAdminFacade().getProductInfos(cat);
				List<String> products = new ArrayList<>();
				for (ProductInfoDto pi : productInfos) {
					products.add(pi.getProductName());
				}
				Collections.sort(products);
				productCombo.setModel(new ListComboBoxModel<>(products));
			}
		});
		categoryCombo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		productCombo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
	}

	public void setAdminContext(AdminContext adminContext) {
		this.adminContext = adminContext;
	}

	public void setCategoryComboEnabled(boolean enabled) {
		categoryCombo.setEnabled(enabled);
		productCombo.setEnabled(enabled);
	}

	public void refresh() {
		if(adminContext.getMzmAdminFacade() == null) {
			return;
		}
		List<String> cats = adminContext.getMzmAdminFacade().getAllCategoriesAsList();
		categoryCombo.setModel(new ListComboBoxModel<>(cats));
	}

	public String getSelectedCategoryPath() {
		String cat = (String) categoryCombo.getSelectedItem();
		return cat;
	}
	
	public ProductInfoDto getSelectedProduct() {
		String product = (String) productCombo.getSelectedItem();
		for (ProductInfoDto pi : productInfos) {
			if(pi.getProductName().equals(product)) {
				return pi;
			}
		}
		return null;
	}

	public RecommendationDto getRecommendationDto() {
		return editorPanel.getRecommendationDto();
	}

	/**
	 * This method is called from within the constructor to initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is always
	 * regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
	// <editor-fold defaultstate="collapsed"
	// <editor-fold defaultstate="collapsed"
	// desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents() {

		jScrollPane1 = new javax.swing.JScrollPane();

		setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[]) {
		/*
		 * Set the Nimbus look and feel
		 */
		// <editor-fold defaultstate="collapsed"
		// desc=" Look and feel setting code (optional) ">
		/*
		 * If Nimbus (introduced in Java SE 6) is not available, stay with the
		 * default look and feel. For details see
		 * http://download.oracle.com/javase
		 * /tutorial/uiswing/lookandfeel/plaf.html
		 */
		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
					.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(RecommendationEditingDialog.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(RecommendationEditingDialog.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(RecommendationEditingDialog.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(RecommendationEditingDialog.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		}
		// </editor-fold>

		/*
		 * Create and display the dialog
		 */
		java.awt.EventQueue.invokeLater(new Runnable() {

			public void run() {
				RecommendationEditingDialog dialog = new RecommendationEditingDialog(
						new javax.swing.JFrame(), true);
				dialog.addWindowListener(new java.awt.event.WindowAdapter() {

					@Override
					public void windowClosing(java.awt.event.WindowEvent e) {
						System.exit(0);
					}
				});
				dialog.setVisible(true);
			}
		});
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JScrollPane jScrollPane1;
	// End of variables declaration//GEN-END:variables
}
